﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace CRM.Database.Model
{
    public class VendorsCollection : AbstractCollection
    {
        /// <summary>
        /// Список производителей
        /// </summary>
        public List<Vendors> VendorsList
        {
            get
            {
                return Entities.Vendors.ToList();
                return DB.Entities.Vendors.ToList();
            }
        }

        /// <summary>
        /// список активных объектов
        /// </summary>
        public List<Vendors> VendorsActiveList
        {
            get
            {
                return Entities.Vendors.Where(c => c.IsActive).ToList();
                var result = new List<Vendors>();
                if (VendorsList.Count < 1) return result;
                result.AddRange(VendorsList.Where(item => item.IsActive));
                return result;
            }
        }

        /// <summary>
        /// Производители оборудования
        /// </summary>
        public List<Vendors> EquipmentVendors
        {
            get
            {
                var result = new List<Vendors>();
                foreach (Vendors item in VendorsActiveList)
                {
                    if (item.VendorsVendorsTypes == null) continue;
                    foreach (VendorsVendorsTypes type in item.VendorsVendorsTypes)
                    {
                        if (type.IdVendorsType == 4)
                        {
                            result.Add(item);
                        }
                    }
                }
                return result;
            }
        }

        #region Implementation of IAddDeleteUpdate

        /// <summary>
        /// Получение списка элементов
        /// </summary>
        /// <returns>Список элементов</returns>
        public override List<object> GetList()
        {
            return new List<object>(VendorsList);
        }

        /// <summary>
        /// Получение типа текущего элемента
        /// </summary>
        /// <returns></returns>
        protected override Type GetItemType()
        {
            return typeof (Vendors);
        }

        /// <summary>
        /// Получение статического списка для хранения объектов
        /// </summary>
        /// <returns></returns>
        public override object GetStaticCollection()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Получение элемента из коллекции по идентификатору
        /// </summary>
        /// <param name="itemId">Идентификатор</param>
        /// <returns>Элемент</returns>
        public override object GetItemById(int itemId)
        {
            return Entities.Vendors.Find(itemId);
        }

        /// <summary>
        /// Обновление элемента в коллекции
        /// </summary>
        /// <param name="item">Новый элемент</param>
        /// <param name="userLogin">Логин пользователя, который делает изменения</param>
        /// <returns>Результат операции</returns>
        public bool Update(object item, string userLogin)
        {
            var newVendor = (Vendors) item;
            if (newVendor == null)
                return false;


            var v4Update = GetItemByIdFromDatabase(newVendor.IdVendor) as Vendors;
            if (v4Update == null)
                return false;

            if (!string.IsNullOrEmpty(newVendor.VendorName))
                v4Update.VendorName = newVendor.VendorName;

            v4Update.IsActive = newVendor.IsActive;


            return base.Update(v4Update, userLogin);
        }

        /// <summary>
        /// Обнуление статической коллекции
        /// </summary>
        protected override void SetStaticListToNULL()
        {
            throw new NotImplementedException();
        }

        #endregion

        /// <summary>
        /// Получить производителей оборудования по типу производителя
        /// </summary>
        /// <param name="vendorTypeId"></param>
        /// <returns></returns>
        public List<Vendors> GetVendorsByVendorsTypeId(int vendorTypeId)
        {
            List<Vendors> result = null;
            foreach (Vendors vendor in VendorsList)
            {
                if (vendor.VendorsVendorsTypes == null) continue;
                foreach (VendorsVendorsTypes vendorType in vendor.VendorsVendorsTypes)
                {
                    if (vendorType.IdVendorsType == vendorTypeId)
                    {
                        if (result == null)
                            result = new List<Vendors>();
                        if (!result.Contains(vendor)) result.Add(vendor);
                        break;
                    }
                }
            }
            return result;
        }
    }
}